#ifndef GPU_RENDER_HPP
#define GPU_RENDER_HPP

#include "ap_int.h"
#include "hls_stream.h"

// 包含所有子模块的头文件
#include "fpal.hpp"
#include "hr.hpp"
#include "pdtdw.hpp"
#include "pbirsm.hpp"

// 顶层 GPU_Render HLS 函数声明
// 这个函数将整合 PBIRSM, HR, PDTD 和 DDR_Write_Engine 模块。
// 它将对外暴露所有必要的 AXI-Lite 控制端口和 AXI-Master DDR 端口。
void GPU_Render(
    // --- 控制参数 (来自 PS, 写入 S_AXILITE 寄存器) ---
    // PBIRSM 的参数
    ddr_word_t* params_buffer_base_addr,       // S_AXI_HP0: DDR中三角形参数缓冲区的基地址
    const ap_uint<16> num_triangles_to_process, // 需要处理的三角形数量

    // HR 和 PDTD 的参数 (共享分辨率)
    const ap_uint<11> max_x_res,               // 屏幕X分辨率 (1280)
    const ap_uint<11> max_y_res,               // 屏幕Y分辨率 (720)

    // DDR_Write_Engine 的参数 (分离 Z-buffer 读写接口)
    zbuffer_ddr_word_t* zbuffer_ddr_read_base_addr,   // S_AXI_HP1: 深度缓冲区读基地址 (修正类型)
    zbuffer_ddr_word_t* zbuffer_ddr_write_base_addr, // S_AXI_HP2: 深度缓冲区写基地址 (修正类型)
    color_ddr_word_t* framebuffer_ddr_base_addr,         // S_AXI_HP3: 帧缓冲区基地址

    // --- 状态输出 (给 PS, 从 S_AXILITE 寄存器读取) ---
    ap_uint<32>& total_fragments_generated,    // HR 模块生成的像素片段总数 (现在是顶层输出)
    ap_uint<32>& total_write_ops_processed     // DDR_Write_Engine 实际写入DDR的有效像素数 (通过深度测试)
);

#endif // GPU_RENDER_HPP

